/*
 * @Descripttion: 医生功能模块
 * @version: 1.0
 * @Author: 自由如风
 * @Date: 2021-04-28 15:01:19
 * @LastEditors: 自由如风
 * @LastEditTime: 2021-05-07 13:07:37
 */
const koaRouter = require('koa-router')
const checkIdExistByBody = require('../middleware/common/checkIdExistByBody')
const error = require('../middleware/common/error')
const router = new koaRouter()

/** 中间件 */
const login = require('../middleware/doctor/login')
const online = require('../middleware/doctor/online')
const get_info = require('../middleware/doctor/get_info')
const get_foresee_list = require('../middleware/doctor/get_foresee_list')
const put_firesee_agree = require('../middleware/doctor/put_firesee_agree')
const put_foresee_reject = require('../middleware/doctor/put_foresee_reject')
const create_patient = require('../middleware/patient/create')
const prescription_patient = require('../middleware/prescription/create')
const prescription_sheet_patient = require('../middleware/prescription_sheet/create')

router.prefix('/doctor')


/** 医师登录 */
router.post(['/login'], async function (ctx, next) {
    ctx.checkBody('name').notEmpty().len(1)
    ctx.checkBody('pwd').notEmpty().len(6).md5()
    await next();
}, error, login)

/** 医师获取自己的工作信息 */
router.get(['/get_work_info'], online, get_info)

/** 医师获取自己预约列表 */
router.get(['/get_foresee_list', '/foresee'], online, get_foresee_list)

/** 医师同意预约 */
router.put('/foresee_agree', online, async function (ctx, next) {
    ctx.checkBody('id').notEmpty();
    await next();
}, error, put_firesee_agree)

/** 医师拒绝预约 */
router.put('/foresee_reject', online, async function (ctx, next) {
    ctx.checkBody('id').notEmpty();
    await next();
}, error, put_foresee_reject)

/** 医生创建一个患者 */
router.post('/patient', online, async function (ctx, next) {
    ctx.checkBody('number').notEmpty().len(2, 20);
    ctx.checkBody('name').notEmpty().len(2, 20);
    ctx.checkBody('sex').notEmpty().in(['男', '女']).default('男');
    ctx.checkBody('age').notEmpty().isInt({ min: 1, max: 100 }).toInt();
    ctx.checkBody('memo').optional().trim().default(null);

    ctx.request.body.patient_type = '01';// 未知字段
    await next();
}, error, create_patient)

/** 医生给患者开处方 */
router.post('/prescription', online, async function (ctx, next) {
    ctx.checkBody('patient').notEmpty().isInt().toInt();
    ctx.checkBody('diagnose_sort_id').notEmpty().isInt().toInt();
    ctx.checkBody('diagnose_result').notEmpty().len(2);
    ctx.checkBody('cure_fee').notEmpty().isFloat().toFloat();

    ctx.checkBody('transfusion').optional().isInt().toBoolean().default(false);
    ctx.checkBody('flesh').optional().isInt().toBoolean().default(false);
    ctx.checkBody('change_drug').optional().isInt().toBoolean().default(false);
    ctx.checkBody('cure').optional().isInt().toBoolean().default(false);
    ctx.checkBody('get_drug').optional().isInt().toBoolean().default(false);

    ctx.checkBody('memo').optional().len(2).trim().default(null);

    ctx.request.body.diagnose_date = Date.now();
    ctx.request.body.doctor = ctx.session.user.id;
    ctx.request.body.prescription_number = Date.now();

    await next();
}, error, checkIdExistByBody('patient', 'patient'), checkIdExistByBody('diagnose', 'diagnose_sort_id'), prescription_patient)

/** 医生给患者开药 */
router.post('/prescription_sheet', online, async function (ctx, next) {
    ctx.checkBody('prescription_id').notEmpty().isInt().toInt();
    ctx.checkBody('medicine_lib_id').notEmpty().isInt().toInt();
    ctx.checkBody('doctor_medicine_lib_id').notEmpty().isInt().toInt();
    ctx.checkBody('drug_name').notEmpty().len(2, 200).trim();
    ctx.checkBody('dose').notEmpty().isInt().toInt();
    ctx.checkBody('amount').notEmpty().isInt().toInt();

    ctx.checkBody('memo').optional().len(2).trim().default(null);

    ctx.request.body.prescription_date = Date.now();

    await next();
}, error, checkIdExistByBody('prescription', 'prescription_id'),
    checkIdExistByBody('medicine_lib', 'medicine_lib_id'),
    checkIdExistByBody('doctor_medicine_lib', 'doctor_medicine_lib_id'),
    checkIdExistByBody('dose', 'dose'), prescription_sheet_patient)

module.exports = router